Skip to content

Сompleted task 3#3

Merged
RodionovMaxim05 merged 8 commits intoreviewfrom
main
Jul 14, 2025
Merged

Сompleted task 3#3
RodionovMaxim05 merged 8 commits intoreviewfrom
main

Conversation

@RodionovMaxim05
Copy link
Owner

Реализована задача 3:

  1. Реализовано разделение чтения, записи и сверстки для потоковой обработки набора изображений на основе ограниченных по размеру входных изображений очередей.
  2. Бенчмарк и анализ производительности:
    • Написан бенчмарк для сравнения эффективность реализации параллельной обработки изображений в архитектуре очередей;
    • Проведён анализ результатов бенчмарков.

Copy link
Collaborator

@vkutuev vkutuev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В целом очень приличненько. Мне очень нравится отношение к коду (понятность, структурированность, документированность и т.д.)

Хотелось бы более хитрые сценарии для бенчмарков:

  • мало, но очень больших изображений
  • очень много мелких изображений
  • что-то промежуточное

Но в целом гуд и зачтено (но замечание про error рекомендую поправить и больше так не делать)

Comment on lines +145 to +147
pthread_mutex_lock(&img_q->push_mutex);
pthread_cond_signal(&img_q->cond_not_full);
pthread_mutex_unlock(&img_q->push_mutex);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А тут точно нужно захватывать push_mutex? На стороне queue_push есть ограничивающее условие, которое компенсирует сигнал, который прошёл до вставания в ожидание на cond_not_full

```
`Reader` читает изображение и помещает его во входную очередь (`Input Queue`) → `Worker` извлекает изображения из `Input Queue`, выполняет свертку, помещает результат в выходную очередь (`Output Queue`) → `Writer` извлекает результат из `Output Queue` и записывает в файл.

Тестирование проводилось на наборе из [9 изображений](input_queue_mode/), полученных применением различных фильтров к [`cat.bmp`](images/cat.bmp). Таким образом, все изображения имеют одинаковый размер - `5.9 MiB`, что позволяет минимизировать влияние объёма данных на результаты тестирования. Однако их содержимое различно, поэтому каждое изображение необходимо отдельно загружать в память и записывать результат обратно, в отличие от случая с полностью идентичными изображениями, когда можно было бы загрузить файл один раз и использовать его повторно.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну хоть бы директорию на полгига прогнать, а то масштабы какие-то детские


Эксперимент охватывал следующие параметры:
1) Конфигурации распределения потоков между ролями: (`readers`, `workers`, `writers`);
2) Лимиты памяти :
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А почему было принято решение ограничивать память, а не число изображений в очереди? Так мы можем не угадать и где-нибудь в середине мы неожиданно пропустим какие-то изображения

@RodionovMaxim05 RodionovMaxim05 merged commit 5f88fb5 into review Jul 14, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants